#ifndef __TIM_CONFIG_H
#define __TIM_CONFIG_H

/* C++兼容性支持 ------------------------------------------------------------*/
#ifdef __cplusplus
 extern "C" {  // 确保C++编译器按C语言规则处理函数名（避免名称修饰）
#endif

/* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"      // 包含STM32F10x系列外设库定义
                            // 提供TIM定时器、NVIC等外设的寄存器结构体和枚举类型

/* 宏定义 --------------------------------------------------------------------*/
/* 注：当前文件未定义宏，保留此区域供后续扩展使用
   可添加的宏示例：
   - #define TIM4_MAX_COUNT 65535  // TIM4最大计数值（16位定时器）
   - #define TIM4_BASE_FREQ 72000000UL  // TIM4基础时钟频率（72MHz）
*/

/* 全局变量声明 --------------------------------------------------------------*/
extern volatile u16 ms_HcSR04_Count;  
// 作用：累计TIM4定时器的溢出次数（时间单位取决于中断频率）
// 关联硬件：与TIM4的更新中断绑定，每次中断递增1
// 使用场景：主要用于超声波传感器（Hc-SR04）的时间测量，计算测距时间
// volatile修饰必要性：
// 1. 变量在中断服务函数（TIM4_IRQHandler）中被修改
// 2. 同时在主程序中被读取，防止编译器优化导致数据不一致
// 3. 确保CPU每次从内存读取最新值，而非寄存器缓存

/* 函数声明 ------------------------------------------------------------------*/
/**
  * @brief  TIM4定时器初始化函数，配置为定时中断模式
  * @param  Freq_Up: 频率计算分子参数（用于调整中断周期）
  * @param  Freq_Down: 频率计算分母参数（用于调整中断周期）
  * @retval 无
  * @核心配置：
  *         - 定时器时钟源：APB1总线时钟（72MHz，经倍频后）
  *         - 预分频器：7200-1（分频后计数频率为10kHz，即100μs/计数）
  *         - 计数模式：向上计数（0→ARR→0循环）
  *         - 中断触发：计数器溢出（更新事件）时产生中断
  * @参数关系：
  *         中断频率 = Freq_Down / Freq_Up（单位：Hz）
  *         中断周期 = Freq_Up / Freq_Down（单位：秒）
  * @典型调用：
  *         TIM4_Config(1, 10) → 中断频率10Hz（周期100ms）
  *         TIM4_Config(5, 1) → 中断频率0.2Hz（周期5秒）
  * @注意事项：
  *         - 函数内部会自动配置NVIC中断控制器，设置TIM4中断优先级
  *         - 初始化后需确保TIM4_IRQHandler已实现（中断服务函数）
  */
void TIM4_Config(u32 Freq_Up, u32 Freq_Down);

/**
  * @brief  TIM4定时器中断服务函数（系统自动调用，无需手动调用）
  * @note   必须在启动文件（如startup_stm32f10x_hd.s）中注册中断向量
  * @功能说明：
  *         1. 检查中断源是否为更新事件（计数器溢出）
  *         2. 清除中断标志位（防止重复触发）
  *         3. 递增全局计数器ms_HcSR04_Count
  * @执行约束：
  *         - 函数体必须精简，避免耗时操作（如循环、IO读写）
  *         - 执行时间应控制在10μs以内（避免影响主程序时序）
  *         - 禁止调用可能导致阻塞的函数（如Delay_ms）
  */
void TIM4_IRQHandler(void);

/* C++兼容性支持 ------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif

#endif /* __TIM_CONFIG_H */

/************************ (C) COPYRIGHT Timer_Config.h *********************/
